package com.itheima.websocket;

/**
 * WebSocket
 *      大多数程序都是 B / S 架构
 *          -- 浏览器里面通过 Ajax 发送 HTTP 请求给服务器
 *          -- 服务器进行处理 并且响应
 *          -- 这里的方向是固定的 HTTP 请求只能从浏览器发送到服务器 服务器再响应 不能是服务器发送 HTTP 请求
 *
 *          -- 但是有 HTTPClient ??? 这个是服务器与服务器之间的 HTTP 请求 他们是双向的
 *          -- 上面说的只是服务器不能给浏览器发 HTTP 请求
 *
 *                  -- 弊端就是浏览器不能主动发送消息 比如在微信支付的时候就用不了   ( 也可以前端你每隔一秒就询问一次是否成功支付 )
 *
 * WebSocket协议
 *      -- 浏览器和服务器之间建立一个全双工通信协议
 *      -- 双方都可以主动的发送消息
 *
 *      -- 通信流程
 *          -- 浏览器发起一个 HTTP 请求 请求建立 WebSocket 连接
 *              请求行：GET wx://localhost:8080/ws/chat HTTP / 1.1
 *              请求头：Connection: Upgrade     --> 请求协议升级
 *                      Upgrade: websocket      --> 升级为 WebSocket
 *              响应行 HTTP / 1.1 101 Switch Protocols 101 表示同意协议升级
 *              响应头：Connection: Upgrade
 *                      Upgrade: websocket --> 协议升级为 WebSocket
 *
 *      -- 流程
 *          浏览器发起 HTTP 请求 Upgrade：websocket
 *          服务器将协议升级为 WebSocket
 *          服务器响应 HTTP 响应 Upgrade：websocket Status 101 协议即将变更
 *          二者通过 WebSocket协议 自由沟通
 *
 * WebSocket 是基于 TCP 协议实现的
 * TCP 是全双工协议 但是 HTTP 设计成了单向的
 *
 * WebSocket 协议没有同源限制 --> 就是没有跨域问题
 *
 *
 * Java 实现 WebSocket 的两种方式：1.基于 Java 注解 2.使用 Spring 提供的上层封装
 *      -- 基于 Java 注解的实现
 *          服务器端类：用 @ServerEndpoint 监听连接 就是把这个类声明为服务器类
 *          连接成功：@OnOpen
 *          连接关闭：@OnClose
 *          收到消息等状态：@OnMessage
 *
 *          配置类：把 Spring 封装好的 ServerEndpoint 注册到容器中
 *
 */
public class WebSocketMessage {
}
